﻿using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EGuayas.Web.Auditoria
{
    /// <summary>
    /// Wuc tareas 
    /// </summary>
    public partial class wucTareas : ucWuc
    {
        protected String FaseId
        {
            get
            {
               
                return ReadCustomConfigFaseAuditoria(this.pnlTareas, this.ID);
            }

        }
        protected String AuditoriaId
        {
            get
            {

                return ReadCustomConfigAuditoriaId(this.pnlTareas, this.ID);
            }

        }

       
        protected String PageId
        {
            get
            {
                
                return ReadCustomConfigPage(this.pnlTareas, this.ID);
            }

        }
        protected String ModuloTareaAuditoria
        {
            get
            {

                return ReadCustomConfig(this.pnlTareas, this.ID, "_aud");
            }

        }
        /// <summary>
        /// Buscar los directores y subdirectores asignados, y cambia propiedad S a asignados en fase anterior
        /// </summary>
        /// <returns></returns>
        private TecnicoLista findListaTecnicos()
        {
            TecnicoLista listaTecnicosNow = TecnicoLista.GetTecnicoLista(Constantes.Auditoria);
            TareaLista listaTareas = null;
            //Obtener la fase anterior a la actual
            FaseLicenciamientoLista itemsFases = FaseLicenciamientoLista.GetFaseLicenciamientoLista(Guid.Parse(GetSessionPage.ExpedienteId(PageId)));
            //Actualizar estado actual
            FaseLicenciamientoInfo faseFinalizada = itemsFases.FirstOrDefault(r => r.EstadoFase == Valores.Codigo_Estado_Fase_Finalizado);
            if (faseFinalizada != null)
            {
                //Llenar datos de directores y subdirectores
                ModuloCriteria tareaCriteria = ModuloCriteria.NewModuloCriteria();
                tareaCriteria.Id = faseFinalizada.Id.ToString();
                tareaCriteria.Modulo = Valores.Modulo_Tarea_Licenciamiento;
                //Obtener lista de tecnicos de la fase anterior
                listaTareas = TareaLista.GetTareaLista(tareaCriteria);

                foreach (TareaInfo personAsig in listaTareas)
                {
                    TecnicoInfo perFind = listaTecnicosNow.FirstOrDefault(r => r.Id == personAsig.TecnicoId);
                    if (perFind != null)
                    {
                        perFind.Asignado = "S";
                    }
                }


            }
            return listaTecnicosNow;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!X.IsAjaxRequest)
                {
                    EnabledBtnNuevoTarea();
                    this.stoCbxTecnicos.DataSource = findListaTecnicos();
                    this.stoCbxTecnicos.DataBind();
                    BindDataTarea();
                    if ( GetSessionUsuario.UsuarioRolCodigo == Valores.Codigo_Rol_TecnicoAuditoria || GetSessionUsuario.UsuarioRolCodigo == Valores.Codigo_Rol_TecnicoLicencimiento)
                    {
                        int index = this.gpTarea.ColumnModel.Columns.Count;
                        //No vizualizar las ultimas 3 columnas
                        for (int i = 3; i > 0; i = i - 1)
                        {
                            index -= 1;
                            this.gpTarea.RemoveColumn(index);
                        }
                        //this.gpTarea.Reconfigure();
                        //this.gpTarea.Refresh();
                        this.btnForm.Disable();
                    }
                }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }

        private void EnabledBtnNuevoTarea()
        {
            try
            {
                var criteria = (ModuloTareaAuditoria == Valores.Modulo_Tarea_Aud_Cump) ? GetSessionPage.GetSession(FaseId) : AuditoriaId;
                if (criteria != "")
                {
                    this.btnForm.Enable();
                }
                else
                {
                    this.btnForm.Disable();
                }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        #region Tarea
        [DirectMethod]
        private void BindDataTarea()
        {
            try
            {
                var Id = (ModuloTareaAuditoria == Valores.Modulo_Tarea_Aud_Cump) ? GetSessionPage.GetSession(FaseId) : AuditoriaId;
                if (Id != "")
                {
                        var tareaCriteria = ModuloCriteria.NewModuloCriteria();
                        tareaCriteria.Id = Id;
                        tareaCriteria.Modulo = ModuloTareaAuditoria;
                        this.stoTarea.DataSource = TareaLista.GetTareaLista(tareaCriteria);
                        this.stoTarea.DataBind();
                }
              }
            catch (Exception ex)
            {
                RegistrarLog("BindDataTarea " + ex);
            }
        }
        /// <summary>
        /// Elimnar item de tarea
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnEliminar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var id = Guid.Parse(e.ExtraParams["hddTecDelId"]);
                Tarea objTar = Tarea.GetEditableRoot(id, ModuloTareaAuditoria);
                objTar.Delete();
                objTar.Save();

                BindDataTarea();
                //gpTarea.Refresh();

            }
            catch (Exception ex)
            {
                RegistrarLog("btnEliminar_Click " + ex);
            }


        }
        /// <summary>
        /// Crear/Modificar tareas
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGuardar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                Tarea objTar = Tarea.NewEditableRoot(ModuloTareaAuditoria);
                string msgOperacion = "";
                if (e.ExtraParams["hddId"] == "")
                {
                    msgOperacion = "creada";
                    objTar.Id = System.Guid.NewGuid();
                }
                else
                {
                    msgOperacion = "modificada";
                    objTar = Tarea.GetEditableRoot(Guid.Parse(e.ExtraParams["hddId"]), ModuloTareaAuditoria);
                }
                String _sesper = GetSessionUsuario.PersonaId;
                Guid _id = Guid.Parse(_sesper);
                JefeDepartamental jefeDepar = JefeDepartamental.GetEditableRoot(_id);
                if (jefeDepar.PersonaId == "")
                {
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.INFO,
                        Title = "Estado",
                        Message = string.Format("{0}", "Usuario que asigna tarea no tiene rol Jefe Departamental")
                    });
                }
                else
                {
                    objTar.Tipo = ModuloTareaAuditoria;
                    objTar.JefeId = jefeDepar.Id.ToString();
                    //TODO: Aqui toca repetir la asignacion de estos valores 
                    //NO PORQUE SON VALORES DIFERENTES
                    objTar.IdFase = GetSessionPage.GetSession(FaseId);//
                    objTar.IdAuditoria =AuditoriaId;//
                    objTar.Asunto = e.ExtraParams["txtAsunto"];
                    objTar.Descripcion = e.ExtraParams["txtDesc"];
                    objTar.TecnicoId = e.ExtraParams["ddfTecnico"];
                    objTar.FechaInicio = Convert.ToDateTime(e.ExtraParams["dfFechaInicio"]);
                    objTar.FechaFin = Convert.ToDateTime(e.ExtraParams["dfFechaLimite"]);
                    objTar.Responsable = e.ExtraParams["rdg_resp"];
                    objTar.ExpedienteId = GetSessionPage.ExpedienteId(PageId);
                    objTar.Save();

                    BindDataTarea();
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.INFO,
                        Title = "Estado",
                        Message = string.Format("{0} <b>{1}</b> {2}", "Tarea", objTar.Asunto, msgOperacion)
                    });
                }

            }
            catch (Exception ex)
            {
                RegistrarLog("btnGuardar_Click " + ex);
            }
        }
        #endregion
    }
}